SPB Git forge

spb/toveli

Public
14commits 1branches 0releases
1.1 MBsize
maindefault branch
5 h agolast push
TypeScript 50.6% JavaScript 46.1% SQL 2.1% Shell 0.6% CSS 0.5%
1.2 KB · 17 lines typescript
Raw Blame History
1import { NextRequest, NextResponse } from "next/server";2import { assertSameOrigin, requireUser } from "@/lib/auth/session";3import { attest, transition, type Transition } from "@/lib/listings/service";4import { apiError, handle } from "@/lib/api";5export const dynamic = "force-dynamic";6const ACTIONS = new Set(["publish", "pause", "resume", "archive", "mark-sold", "mark-rented", "reopen", "attest"]);7export async function POST(_req: NextRequest, { params }: { params: Promise<{ id: string; action: string }> }) {8  try {9    await assertSameOrigin(); const u = await requireUser(); const { id, action } = await params;10    if (!ACTIONS.has(action)) return apiError(404, "not_found", "Action inconnue");11    if (action === "attest") { await attest(id, u.id, u.roles); return NextResponse.json({ ok: true }); }12    const r = await transition(id, u.id, u.roles, action as Transition);13    if (r.problems.length) return NextResponse.json({ ok: false, problems: r.problems, status: r.listing.status }, { status: 422 });14    return NextResponse.json({ ok: true, status: r.listing.status, listing: { id: r.listing.id, slug: r.listing.slug, status: r.listing.status, moderationNote: r.listing.moderationNote } });15  } catch (e) { return handle(e); }16}17